package pers.fulsun.demo.springcloud.config;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import pers.fulsun.demo.springcloud.filter.RequestTimeFilter;

/**
 * 网关配置
 *
 * @author fulsun
 * @create: 2021-08-16 21:52
 */
@Configuration
public class GatewayConfig {
    /**
     * 添加路由并给路由添加过滤器
     *
     * @param
     * @return
     */
    @Bean
    public RouteLocator customerRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(
                        // 自定义了访问前缀，在真正的Gateway进行路由转发的时候，会用过f.stripPrefix(2)把前缀去掉。
                        // 使用场景:可以把对外暴露的URL通过加前缀分组打标。
                        r -> r.path("/test/prefix/client/**")
                        .filters(f -> f.stripPrefix(2)
                                // 把自定义的Filter加到Filter链里面执行 GlobalFilter不需要加进去
                                .filter(new RequestTimeFilter())
                                .addResponseHeader("X-Response-Default-Foo", "Default-Bar"))
                        // 对spring.application.name等于springcloud-client源服务应用中的URL进行协议适配转发。
                        .uri("lb://springcloud-client")
                        .order(0)
                        .id("springcloud-client")
                )
                .build();
    }
}